#include "Global.h"
#include "dialogo.h"

Global* Global::_instancia = NULL;

Global::Global()
{
}

Global::~Global()
{
}

void Global::destruirInstancia()
{
    if (_instancia != NULL) {
        delete _instancia;
        _instancia = NULL;
    }
}

void Global::cargarConfiguracion(QDomDocument documento)
{   
    QDomElement elementoDocumento = documento.documentElement();

    QDomElement elementoVentanas = elementoDocumento.firstChildElement("ventanas");
    if (elementoVentanas.isNull()) {        
        return;
    }

    for (QDomElement elementoDialogo = elementoVentanas.firstChildElement("dialogo");
        !elementoDialogo.isNull();
        elementoDialogo = elementoDialogo.nextSiblingElement("dialogo")) {
        QString identificador = elementoDialogo.attributeNode("identificador").value();
        int ancho = elementoDialogo.attributeNode("ancho").value().toInt();
        int alto = elementoDialogo.attributeNode("alto").value().toInt();

        mapaDimensiones.insert(identificador, QSize(ancho, alto));
    }
}

void Global::guardarConfiguracion(QDomDocument documento)
{
    QDomElement elementoDocumento = documento.documentElement();

    QDomElement elementoVentanasAntiguo = elementoDocumento.firstChildElement("ventanas");

    QDomElement elementoVentanas = documento.createElement("ventanas");
    elementoDocumento.appendChild(elementoVentanas);

    QMapIterator<QString, QSize> iterador(mapaDimensiones);
    while (iterador.hasNext()) {
        iterador.next();
        QString identificador = iterador.key();
        QSize dimension = iterador.value();

        QDomElement elementoDialogo = documento.createElement("dialogo");
        elementoDialogo.setAttribute("identificador", QString("%1").arg(identificador));
        elementoDialogo.setAttribute("ancho", QString("%1").arg(dimension.width()));
        elementoDialogo.setAttribute("alto", QString("%1").arg(dimension.height()));
        elementoVentanas.appendChild(elementoDialogo);
    }

    if (elementoVentanasAntiguo.isNull()) {
        elementoDocumento.appendChild(elementoVentanas);
    } else {
        elementoDocumento.replaceChild(elementoVentanas, elementoVentanasAntiguo);
    }
}

Global* Global::instancia()
{
    if (_instancia == NULL) {
        _instancia = new Global();
    }
    return _instancia;
}

QSize Global::obtenerTamanoVentana(const QString& identificador)
{
    if (mapaDimensiones.contains(identificador)) {
        return mapaDimensiones[identificador];
    } else {
        return QSize();
    }
}

void Global::asignarTamanoVentana(const QString& identificador, const QSize& tamano)
{
    mapaDimensiones[identificador] = tamano;
}

/*!
 * Muestra un mensaje de error, un aviso o una pregunta al usuario.
 */
bool Global::mostrarMensaje(QWidget* padre, QString mensaje, int tipo)
{
    return Dialogo::mostrarMensaje(padre, mensaje, tipo);
}
